<?php
class Delivery_Model_Mapper_DireccionesCliente
	extends Delivery_Model_Mapper_Abstract
{
	public function getDbTable()
	{
		return parent::getDbTable( 'DireccionesCliente' );
	}
	
	public function save( $clienteDireccion ){

		$direccionesMapper = Delivery_Model_Factory::mapper('Direcciones');
		$dbTable = $this->getDbTAble();
		
		$direccionesMapper->save( $clienteDireccion );
		
		// control para que no se intenten guardar 2 veces la misma direccion
		$rowset = $dbTable->getById( $clienteDireccion->idDireccion , $clienteDireccion->idCliente, $clienteDireccion->depto );
		if ($rowset){
			return $rowset['idDireccion'];
		}
		
		$clienteDireccion->activo = 1;
		
		$dbTable->insert( $clienteDireccion );
		
		return $clienteDireccion->idDireccion;
	}
	
	public function delete( $clienteDireccion ){
	
		$dbTable = $this->getDbTAble();		
		
		//chequeo si el producto esta en algún pedido
		$mapper = Delivery_Model_Factory::mapper('Pedidos');
		if ( $mapper->inAnyOrder( $clienteDireccion ) ){			
			
			$clienteDireccion->activo = 0;
			
			return $dbTable->update(  $clienteDireccion  );
			
		}else{
			$this->logDeleted( $clienteDireccion );
		}
		
		return $dbTable->delete( $clienteDireccion );
	}
	
	
	/**
	 * @param idDireccion
	 * @return objeto direccion
	 */
	public function getById( $idDireccionCliente ){
	
		if ( $this->getIdentityMap()->isRegistered( 'Delivery_Model_ClienteDireccion', $idDireccionCliente )){
			return $this->getIdentityMap()->get( 'Delivery_Model_ClienteDireccion', $idDireccionCliente );
		}
		
		$dbTable= $this->getDbTAble();
		$row	= $dbTable->getById( $idDireccionCliente );
	
		if( empty($row) ){
			throw new Delivery_Model_Exception( Delivery_Model_Exception::ADDRESS_NOT_FOUND );
		}
		
		$direccion = $this->_fetch( $row );
		$this->loadCiudad( $direccion );
		return $direccion;	
	}
	
	/**
	 * @param $idCliente
	 * @return array objetos direccion
	 */
	public function getByCliente( $idCliente ){
	
		$dbTable= $this->getDbTAble();
	
		$direcciones = $this->_fetchCollection(
			'DireccionesCliente',
			$dbTable->getByCliente( $idCliente )
		);
		
		$this->loadCiudad( $direcciones );
		return $direcciones;	
		
	}	
	
	public function loadCiudad( $direcciones )
	{
		$mapper = Delivery_Model_Factory::mapper('Direcciones');
		return $mapper->loadCiudad( $direcciones );		
	}
	
	/**
	 * @param array
	 * @return objeto Delivery_Model_ClienteDireccion
	 */
	protected function _fetch( $row )
	{
		$direccion = new Delivery_Model_ClienteDireccion( $row );
		
		$this->getIdentityMap()->set( $direccion, $direccion->getId() );
		
		return $direccion;
	}
	
}